技術問答
技術文章
iT 徵才
Tag
聊天室
2025 鐵人賽
登入/註冊
問答
文章
Tag
邦友
鐵人賽
搜尋
2023 iThome 鐵人賽
DAY
9
0
Web 3
Web3 X 公共財
系列 第
9
篇
Day 09 - 前10天Solidity 學習紀錄
15th鐵人賽
法蘭克
2023-09-24 19:43:48
552 瀏覽
分享至
Day 1,2
What I read
Hydai
Day2 : 區塊練特性 行為受限: 產生隨機數 + 資料儲存(成本)
如何產生 有特定產生模式 + 異地完全一致 + 不能被預測
Day3 合約結構
Day5 value type
static
no undefined / null
value , reference , mapping
value
boolean 預設false
Integer int= int256, uint= uint256, intN M[8,256], uintN
address 20Bytes +payable
Enums 列舉 預設第一個元素 常用來
model choice
or
track of state
enum EnumName {elements1, 2}
EnumName X = EnumName.element1
Struct 用於表示一個複雜變數
Enum 表示一個單一變數的不同狀態或值
Day6 ref type
資料存放的位置 memory, storage, calldata(read-only,儲存函數參數)
執行結束 / 合約銷毀 超級貴! +local storage /
位置移動代價!
memory/storage
bytes
var.length
string
字串是參考! 巨大限制
Type[length]
memory|storage N
Type[]
+push(x) , +pop()
Struct K{ }
Day 7 Function 合約互動
function FnName [V] [SM] [returns (...)] {}
Visibility: public, private, external, interal
State Mutability: pure 不讀取/不寫入, view 只讀取, X
storage, balanceof, block, tx, msg (除了msg.sig, msg.data), 呼叫不是pure韓式,特定組合指令
X: storage, emit log, 建立合約, selfdestruct, call, 呼叫非pure非view, low-level calls, 特定組合語言
Day8 constructor 所有合約自帶建構子 constructor(){}
部屬的回傳值 = 合約的最終程式碼
建構子只會在合約部屬的那一刻被呼叫 用途
用來
改變
[變數的預設值]
所有的stroage變數再呼叫constructor之前已經被初始化
最終程式碼 不包含 建構子 及only建構子使用的internal functions
Day9 receive() external payable {}
一個合約只能有唯一一個 receive,不需要function,不允許傳入值,無法回傳任何值,必須要有external payable
發送一個 無calldata交易 到合約中被觸發
如果receive多了 會失敗
Storage, 建立合約,呼叫external function(太大),發ether(+2300)
Day10 send ether
member function of addresstype (non-payable系列成員)
balance
-> uint245
code -> bytes memory
codehash -> bytes32
low-level call系列: call, delegatecall, static call
if payable
+addr.transfer(uint256 amount) 轉給addr
失敗會revert
+addr.send(uint256 amount) -> bool
失敗回傳false -> 建議用send
全域變數 msg.sender
msg.sender -> address = 當前address
當前合約 this
address(this)
Day11
modifier M () {} _;
require(條件,"錯誤原因") if ture 繼續 ; false revert
Day12 Mapping type
mapping(KeyType => ValueType) Name
keyType 不支援 mapping, structs, array
value 任意
原理 ref
那些關於 Ethereum 的事
Solidity 書
Struct 用於表示一個複雜變數
Enum 表示一個單一變數的不同狀態或值
Day 3~5
Hydai
day 13 控制結構 if for while break continue
條件 = 必是布林值
day 14 Event at 區塊練 log at網頁
合約本身無法看見自己發出的事件 因為再區塊上 可以被監看區塊的人看到
indexed 有被放進Topics
4格 32bytes
Topics[0]
keccak(事件名稱 + "("+事件參數.map(canonical_type_of).join(",")+")")
Topics[1~3]存放 Indexed事件的參數
non-indexed 全部打包成ABI,存放在data
宣告 event EVENTNAME() 不醫定要有名稱
使用 emit ()
放入 event E(type indexed, )只有三個三格,若為reference type 會先被Hash
Day17~21 Interface 宣告function+event + ERC20
IERC20
抽象化function _XXX
Book
error handling assert用來檢測完全不該再合約裡出現的錯誤 require用來檢測使用者的輸入等
require() 檢驗簡單條件 合理的輸入/致行前必要簡單條件
assert()測試或Debug且用來檢測不變量(不該被改變的常數等)
revert() 確認複雜狀態
try/catch 確認外部執行函數和合約建立時(再一個合約裡面建立另外一個合約是)的錯誤
catch Error(string memory XX)
宣告過revert 或 require 異常處理被觸發時候執行
catch Panic(uint errorCode){}
Assert,除0,異常鎮獵取值,運算溢位執行
catch (bytes memory XXlowleveldataXX)
catch {}
try 根據外部涵是呼叫或創建合約行為來定義
Event
Inheritance polymorphism
c3 linearization
function overloading = function polymorphism
function overriding = contract polymorphism
Interface 定義標準,好處:彈性效率可擴充性模組化
不可以有實作部分,不能繼承
可視性只能是external
不可有constructor
不可有任何State variables
抽象合約 至少一個function沒有包含實作部分
template method
debug
與interface不同在於: interface只能是合約ABI能夠表示的範疇
Library 不是contract(很類似) 不具有自我摧毀
不可宣告state variables,不可傳送ether, 只會部屬一次
兩種library類型
deployed
embedded 當所有library函數都是interal 沒有自己合約地址 變成一部分
使用 using ... for
Day 6-7
Haidei
ERC721 + ERC165
Book
Vault
open zepplin uitiliy + openzeppelin ownable
ERC20 + ERC721
daily
Solidity by Example
雜項
清交DAO
- Uniswap v1->v2
- Remix 簡介
- Foundry + Etheranut 簡介
Uniswap 演進
Next
學習理解Foundry
了解Proxy contract
留言
追蹤
檢舉
上一篇
Day 08- hypercerts 與 Protocol Labs
下一篇
Day 10 - 回歸<Taka: 賦稅作為終局之戰>
系列文
Web3 X 公共財
共
30
篇
目錄
RSS系列文
訂閱系列文
2
人訂閱
26
Day 26 - RetroPFG / PCO
27
Day 27 - PCO -1
28
Day 28 - PCO-2: the space / thisartworkisalwaysonsale / fxhash ticket
29
Day 29 - solidity 學習資源整理
30
Day 30 - 完賽小心得 + 參賽願景
完整目錄
熱門推薦
{{ item.subject }}
{{ item.channelVendor }}
|
{{ item.webinarstarted }}
|
{{ formatDate(item.duration) }}
直播中
立即報名
尚未有邦友留言
立即登入留言
iThome鐵人賽
參賽組數
403
組
團體組數
13
組
累計文章數
2913
篇
最後報名日
9/15
看影片追技術
看更多
{{ item.subject }}
{{ item.channelVendor }}
|
{{ formatDate(item.duration) }}
直播中
熱門tag
看更多
15th鐵人賽
16th鐵人賽
13th鐵人賽
14th鐵人賽
12th鐵人賽
11th鐵人賽
鐵人賽
2019鐵人賽
javascript
2018鐵人賽
python
2017鐵人賽
17th鐵人賽
windows
php
c#
windows server
linux
css
react
熱門問題
不知道網路紅隊的要去那加公司
更換FW後Public IP service無法使用
鼎新ERP欄位可修改預設值嗎
Ansible 連線主機的 port 不是 22 遇到的問題
備份映像檔
Outlook 寄件備份消失問題 (已解決)
請問有人遇過在lightsail上部屬fastapi失敗的案例?
aws ec2 檢查故障問題
IIS 管理員 連線功能不見
熱門回答
鼎新ERP欄位可修改預設值嗎
不知道網路紅隊的要去那加公司
Ansible 連線主機的 port 不是 22 遇到的問題
更換FW後Public IP service無法使用
備份映像檔
熱門文章
什麼是 Signal ?
第10天,No-Code 快速上線又省錢 / 原汁排骨湯 台北最好喝的排骨湯(台北萬華)| 30天滷肉飯
序: AI 加速編碼後,你該學什麼?
第11天,LibreOffice 更省錢 / 司機俱樂部 宵夜好選擇(台北松山)| 30天滷肉飯
第12天,即時通訊軟體選擇 / 金峰滷肉飯 台北名店(台北中正)| 30天滷肉飯
IT邦幫忙
×
標記使用者
輸入對方的帳號或暱稱
Loading
找不到結果。
標記
{{ result.label }}
{{ result.account }}